Skip to content

docs(agents): the commit-trailer exemption is a reporting one; the acceptance-notes heading is English at all five sites - #17023

Merged
os-zhuang merged 3 commits into
mainfrom
claude/issue-16814-trailer-and-acceptance-heading
Sep 9, 2026
Merged

docs(agents): the commit-trailer exemption is a reporting one; the acceptance-notes heading is English at all five sites#17023
os-zhuang merged 3 commits into
mainfrom
claude/issue-16814-trailer-and-acceptance-heading

Conversation

@yinlianghui

Copy link
Copy Markdown
Collaborator

Fixes #16814
Fixes #16807

Two rules were each stated in several places whose copies disagreed, and every seat resolved them alone. This PR aligns every copy of both in one pass, in place, with every edited line inside the 120-byte cap and every file at its unchanged line ceiling (AGENTS.md 1068, os-dev.md 403, SKILL.md 811, dispatch-runbook.md 241). Governed surfaces: draft, human merge, skip-changeset (nothing a package's files[] ships moves; skills/** is untouched, see the mirror probe below).

1. Commit-trailer sentence — the exemption is a REPORTING one (Reading A)

Ruling applied verbatim from the chain head's grading comment: Reading A is canonical — the trailer pair is written model-free, and the runbook's 「⛔ 不再申报为偏差」 is a reporting exemption (do not file a deviation when the harness emits its own trailer), never a licence to emit a model identifier. Landed history is not rewritten, and the text deliberately says nothing about whether a squash normalises trailers (objectui main holds both shapes six hours apart).

Angle-bracket tokens in the listing below are spelled as placeholders (session_ID, NOREPLY_ADDR) per the body-bytes rule; the files carry the real tokens.

site before (bytes) after (bytes)
AGENTS.md:442 \Co-authored-by: Claude NOREPLY_ADDR`; no model identifier lands in a PR title or` (92) \Co-authored-by: Claude NOREPLY_ADDR`; no model identifier lands in a PR title or body,` (98)
AGENTS.md:443 body, a comment, a changeset, a doc or a code comment — the harness-written \Co-Authored-By`` (94) a comment, a changeset, a doc or a code comment. The one exemption is a REPORTING one: a harness-written (104)
AGENTS.md:444 trailer (with its session link) is the one exemption. (53) \Co-Authored-By` trailer is not declared a deviation; the pair stays model-free; landed history is not rewritten.` (113)
references/dispatch-runbook.md:216 - 两条豁免同属规则,⛔ 不再申报为偏差:一是 commit 的 \Co-Authored-By` 尾注(含 session 链接)。` (117) - 豁免不再申报为偏差:一是 harness 的 \Co-Authored-By` 尾注,免的是申报,trailer pair 仍 model-free。` (119)
.claude/agents/os-dev.md:281 - PR 正文与 commit message 分开解析:卡片关系只在正文声明一次,commit ⛔ 不带卡片 trailer。 (114) - 卡片关系只在 PR 正文声明一次:commit ⛔ 不带卡片 trailer,其 trailer pair 一律 model-free。 (112)

AGENTS.md:440-441 and runbook :215 / :217 are byte-identical; :217's 「另一条是」 still attaches to :216's 「一是」.

Bounded in-place fix outside the claimed file surface — scripts/check-partof-closing-keyword.mjs. Its RELATION_CONTRACT quotes the os-dev.md:281 sentence verbatim inside corner brackets, and its self-test holds every quoted sentence to the cited file (citedSentences splits on 。 and checks includes). Rewriting :281 turned that case red — ✗ every sentence inside the corner brackets is verbatim in the cited rules file (got [the old sentence], want []), 1 of 95 — which is the mirror the dispatch did not know about. The four bounded-fix conditions hold: same defect class (a copy of a rule that stopped agreeing with its source), mechanical with a pinned shape (the quotation and its English gloss follow the new sentence), no open PR touches the file (18 open PRs' file lists read via REST at 02:14Z), and its own self-test is already in the dispatched gate family. After the fix: ✓ check-partof-closing-keyword self-test: 95 cases pass.. The claim's declared file surface needs this file added (the PM's write).

2. Acceptance-notes heading — ## Acceptance notes at all five sites (route 1)

The four-channel list (SKILL.md:95) is untouched — no fifth channel. Each site is rewritten in place; where the 4-byte growth of the heading token did not fit under the cap, one word on the same line pays for it.

site before (bytes) after (bytes) paid by
.claude/agents/os-dev.md:48 - 它们进 PR \## 验收备注`,报告 `out_of_scope_findings` 记 `noted, not filed: …`,席位 ACCEPT 时读。` (118) - 它们进 PR \## Acceptance notes`,报告 `out_of_scope_findings` 记 `noted, not filed: …`,席位 ACCEPT 读。` (119)
SKILL.md:348 - (c) AI 写元数据会被运行时拒收或静默丢弃的陷阱;其余进 PR \## 验收备注`,⛔ 不立卡。` (114) - (c) AI 写元数据会被运行时拒收或静默丢弃的陷阱;其余进 PR \## Acceptance notes`,⛔ 不立卡。` (118)
SKILL.md:352 - 判「进验收备注」前先问:哪一个 PR 会碰到这个文件?说得出具体 PR 或人 ⇒ 写进去。 (113) - 判「进 Acceptance notes」前先问:哪一个 PR 会碰到这个文件?说得出具体 PR 或人 ⇒ 写进去。 (118)
SKILL.md:778 - 席位在 ACCEPT 读 PR \## 验收备注`,其中实属三类的由席位补立;三类外已立的卡关 not planned。` (120) - 席位在 ACCEPT 读 PR \## Acceptance notes`,实属三类的由席位补立;三类外已立的卡关 not planned。` (118) 其中
references/dispatch-runbook.md:30 - N 项之外零改动且 PR 自证;范围外发现按立卡三类门槛分流,三类外进验收备注、不单开。 (118) - N 项之外零改动且 PR 自证;范围外按立卡三类门槛分流,三类外进 Acceptance notes、不单开。 (117) 发现

Evidence at 4d41829b: git grep -c 验收备注 → 0 files; git grep -n 'Acceptance notes' -- AGENTS.md .claude → exactly the 5 sites above (AGENTS.md:212 already said "acceptance notes" in lowercase prose and is unchanged).

Mechanism assumptions, measured

  1. Published mirror: grep -rn "验收备注|model-free|Co-authored-by|Co-Authored-By|Acceptance notes|trailer" skills/objectstack-pm-dispatch/ → exit 1, 0 lines. The dispatch's positive control os-dev-report also returns 0 there, so it was not a control; decision_frame (2 hits: SKILL.md:623, rules/dev-template.md:99) and the literal Fixes-hash control (3 hits) are. ⇒ skills/** untouched, no token-ratchet reading owed.
  2. 120-byte cap: every edited line measured before and after (tables above); ✓ check-skill-line-ratchet: declared cross-file moves: 1, total ceilings down 9 lines..
  3. Parallel with the SKILL.md siblings: git merge origin/main (9294959) before opening — it brought PR skills(pm-dispatch): clause-② cards build at the default tier and are gated by the contract review at CONTRACT_REVIEW_TIER (#16905) #16915's SKILL.md lines 514–522 / 639–640 / 675 (net zero below :348 and above :778; file still 811 lines); the three heading sites were relocated by content and hold. Merge commit 4d41829b, no os-regen-pending debt.
  4. Frame block: sed -n '734,752p' SKILL.md | md5sum22f2339f0acb64cdb50c7adc9db681c3 before the edits (unchanged by this PR); check:skill-frame-sync green.

Gates — union run on 4d41829b (after the final commit)

node scripts/pm/dispatch-gates.mjs --commands on tree 4d41829b derives 42 families (the 20 the dispatch named plus 22 pulled in by the gate-script edit); all 42 ran, exit codes captured before any pipe, all 0; dispatch-gates.mjs --ran: Run reconciliation — 42 derived, 42 run, 0 NOT-MEASURED, 0 UNRUN. The formula gate ran after its own prescribed build (turbo run build --filter=@objectstack/formula --filter=@objectstack/lint, under os-verify-lock.sh: VERDICT command-exit 0, held 222 s, waited 339 s). Extra, not derived: check:pm-half-states (names the partof script) — 2749 cases pass. No package is touched, so no build closure or package test is owed; the wider check:* farm is CI's.

Acceptance notes

  • noted, not filed: runbook :215 (「模型标识只禁内容工件」) reads alone as scoping the ban to content artefacts; with :216 now stating the trailer pair is model-free the pair of lines is consistent, but :215 on its own still invites the old reading. Carrier: the skills seat, next time the runbook's model-identifier lines move (the ruling named :216 as the line to change; :215 was left byte-identical on purpose).
  • noted, not filed: the harness attribution guidance injected into this session prescribes a model-named Co-Authored-By trailer and a different footer form; the commits here carry the model-free pair per Reading A, so nothing was declared — the reporting exemption at work, and the sentence it names. Carrier: none (the template lives outside the repo).
  • noted, not filed: docs/audits/2026-09-self-test-shape-census.md names the partof script; its case count is unchanged (95), so the census does not drift. Carrier: none.

维护者速读(草稿)

改了什么:把两条「同一规则写在多处、多处不一致」的文本对齐。一是 commit 尾注规则:AGENTS.md、派发 runbook、os-dev 定义三处现在都说清「豁免的是申报,不是模型名」——尾注对一律不带模型名,harness 自己发出的尾注不用申报偏差,已落地的历史不改写;守这句话的 CI 门禁(partof)里引用的原句同步跟上。二是 dev 报告里「验收备注」小节标题改成英文 ## Acceptance notes,五处同笔改,四通道中文清单不动。

为什么改:两条规则各自在多处的副本互相矛盾,每个席位只能自己选边——objectui 主干六小时内落了两种尾注形状,dev 报告里两种标题并存。改文本比让每个席位反复判断便宜,而且只改文本、零运行期影响。

风险与代价(含回滚):纯文本改动,不动任何发布包,skip-changeset;每个文件行数不变、每行 ≤120 字节,棘轮门禁全绿。回滚就是 revert 本 PR(注意 partof 门禁脚本里的引用句要一起回滚,否则它的自检会红)。已落地的 commit 历史不受影响。

席位意见:(留空)

你要做的:受管面,需你人工合并;若认为「Reading A」这一读法不是你的本意(即允许 harness 的模型名尾注),请在合并前指出,文本会改回另一读法。


Generated by Claude Code

…all five sites

The os-dev definition named the PR section `## 验收备注` while the language
invariant admits Chinese on exactly four channels; devs were picking a side.
The heading is now `## Acceptance notes` in the dev definition, the three
SKILL.md sites (including the seat's ACCEPT read) and the runbook, rewritten
in place with every line within the 120-byte cap; the four-channel list is
not widened.

Claude-Session: https://claude.ai/code/session_01HxLw5aKDPR5RJgyUR7Exkd
Co-authored-by: Claude <noreply@anthropic.com>
…ir stays model-free

AGENTS.md's sentence prescribed the model-free trailer pair and, in the same
breath, exempted "the harness-written Co-Authored-By trailer", which carries a
model name; two seats read it two ways. The sentence now says the exemption is
about REPORTING (a harness-written trailer is not declared a deviation), the
pair a seat writes stays model-free, and landed history is not rewritten. The
runbook's deviation line and the dev definition's commit clause say the same
in place, and the partof gate's verbatim citation of that clause follows it.

Claude-Session: https://claude.ai/code/session_01HxLw5aKDPR5RJgyUR7Exkd
Co-authored-by: Claude <noreply@anthropic.com>

Copy link
Copy Markdown
Collaborator Author

维护者速读 — PR #17023(#16814 + #16807 折叠,skills 席终稿,2026-09-09T02:56Z)

改了什么 — 两条「一处规则多份副本互相打架」的文本对齐。① commit trailer 句:AGENTS.md 那句原来一边写「model-free trailer pair」、一边又说「harness 写的 Co-Authored-By trailer 是唯一豁免」,两种读法产出两种字节;现在明写:豁免的是申报(harness 发出的 trailer 不算 dev 的偏差),trailer pair 本身仍 model-free,已落地历史不改写;派发 runbook :216 与 os-dev 定义 :281 同句对齐。② 验收备注标题:os-dev 定义要求 ## 验收备注,而 GitHub 英文规则只留四个中文通道,dev 各自选边;现在五处统一为 ## Acceptance notes。顺带:check-partof-closing-keyword.mjs 逐字引用 os-dev.md:281 的那段自测因改句而红,引文随之更新(自测 95/95)。五文件 +13/−13,每个文件的行数与上限都不动。

为什么改 — ① 在 objectui main 上已实测:同一 PM 会话六小时内两个 squash 落了两种 trailer 形状(一个带模型名、一个不带);规则不决定,各席自己决定。② 本轮 dev 报告里两种标题并存,未来任何按标题做的普查都会漏一半。

风险与代价(含回滚) — 纯指令文本,不改任何门禁行为、不发布;回滚 = revert 本 PR。代价:三处 120 字节顶格的行各删了一个虚词(时 / 其中 / 发现)来装下英文标题,无规则丢失。已落地的历史 trailer 不动。

席位意见 — 接受。本席在分支头上复核:验收备注 残留 0、Acceptance notes 恰五处;AGENTS.md 442–444、runbook :216、os-dev.md :281 三处口径一致;棘轮各文件上限未动(811 / 403 / 241 / 1068),id-lint、frame-sync、partof 自测全绿,控制字节 0。

你要做的 — 合并;或由 os-zhuang / hotlong 批准,本席随即入队。看一处即可:AGENTS.md 442–444 的新句是否就是你要的规则(trailer 一律不带模型名;harness 自动加的不算 dev 的偏差)。


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment